﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Interfaces;

namespace Model
{
    public class FakturaColl
    {
        // attributter
        private List<Faktura> fakturaliste;

        // konstruktør
        public FakturaColl()
        {
            fakturaliste = new List<Faktura>();
        }

        #region Metoder og kald af metoder til Faktura-objekter

        // Metode til at oprette et faktura-objekt og tilføje det til fakturalisten
        public void OpretFaktura(int fakturaNr, string valutaType, DateTime fakturadato, DateTime leveringsdato, DateTime betalingsdato, 
            string betalingsmetode, string besked)
        {
            Faktura faktura = new Faktura(fakturaNr, valutaType, fakturadato, leveringsdato, betalingsdato, betalingsmetode, besked);
            fakturaliste.Add(faktura);
        }

        // Metode til at finde et faktura-objekt
        public Faktura FindFaktura(int FakturaNr)
        {
            foreach (Faktura f in fakturaliste)
            {
                if (f.FakturaNr == FakturaNr)
                {
                    return f;
                }
            }

            return null;
        }

        // Metode til at hente faktura-iteratoren
        public IEnumerator GetFakturaer()
        {
            return fakturaliste.GetEnumerator();
        }

        // kald af metode til at udregne subtotal ekskl. moms
        public void UdregnSubtotalEkskl(int fakturaNr)
        {
            Faktura f = FindFaktura(fakturaNr);
            f.UdregnSubtotalEkskl();
        }

        // kald af metode til at udregne det beløb som momsen udgør
        public void UdregnMomsBeløb(int fakturaNr)
        {
            Faktura f = FindFaktura(fakturaNr);
            f.UdregnMomsBeløb();
        }

        // kald af metode til at udregne total
        public void UdregnTotal(int fakturaNr)
        {
            Faktura f = FindFaktura(fakturaNr);
            f.UdregnTotal();
        }

        #endregion

        #region Metoder og kald af metoder til Vare-objekter

        // kald af metode til at oprette et vare-objekt
        public void OpretVare(int fakturaNr, int vareID, string varebeskrivelse, int antal, string enhed, double prisPrEnhedEkskl, 
            double moms, double varetotalEkskl)
        {
            Faktura f = FindFaktura(fakturaNr);
            f.OpretVare(vareID, varebeskrivelse, antal, enhed, prisPrEnhedEkskl, moms, varetotalEkskl);
        }

        // kald af metode til at hente vare-iterator
        public IEnumerator GetVarer(int fakturaNr)
        {
            Faktura f = FindFaktura(fakturaNr);
            return f.GetVarer();
        }

        // kald af metode til at finde et faktura-objekts antal af vare-objekter
        public int GetAntalVarer(int fakturaNr)
        {
            Faktura f = FindFaktura(fakturaNr);
            return f.GetAntalVarer();
        }

        // kald af metode til at udregne total beløb for en vare ekskl. moms
        public void UdregnVaretotalEkskl(int fakturaNr, int vareID)
        {
            Faktura f = FindFaktura(fakturaNr);
            f.UdregnVaretotalEkskl(vareID);
        }

        #endregion
    }
}
